import Vue from 'vue'
import VueRouter from 'vue-router'


const VueRouterPush = VueRouter.prototype.push;

VueRouter.prototype.push = function push(to) {

    return VueRouterPush.call(this, to).catch(err => err);

}


const VueRouterReplace = VueRouter.prototype.replace;

VueRouter.prototype.replace = function push(to) {

    return VueRouterReplace.call(this, to).catch(err => err);

}

Vue.use(VueRouter)


const routes = [
    {
        path: '/',
        component: () => import('../vues/Login.vue')
    },
    {
        path: '/login',
        name: 'Login',
        component: () => import('../vues/Login.vue')
    },
    {
        path: '/home',
        name: 'Home',
        component: () => import('../vues/homes/index.vue'),
        children: [
            {path: 'A', name: 'A', component: () => import('@/vues/homes/A.vue')},
            {path: 'B', name: 'B', component: () => import('@/vues/homes/B.vue')},
            {
                path: 'C',
                name: 'C',
                component: () => import('@/vues/homes/C.vue'),
                // props:{id:5,name:'伍六七'}
                // 第二种
                // props:true // 只要有参数就会传递
                props($route) {
                    return {
                        id: $route.params.id,
                        name: $route.params.name,
                        age: $route.query.age
                    }
                }
            }
        ]
    },
    {
        path: 'My',
        name: 'My',
        component: () => import('@/vues/My.vue'),
        meta: {
            keepAlive: true,// 缓存
            isAuth : true, // 是否需要校验
            role: 'admin'
        }
    }
]

const router = new VueRouter({
    routes
})

//全局路由守卫
//to ：到那个组件   from:启始组件
router.beforeEach((to, from, next) => {
    // 如果目标路径与当前路径相同，则直接调用 next() 而不做任何事情
    console.log('to', to.path);
    const userRole = 'admin1'
    // 检查路由是否需要认证
    if (to.matched.some(record => record.meta.isAuth)) {
        // 检查用户角色是否满足路由要求
        if (to.meta.isAuth && userRole !== 'admin') {
            // 如果用户角色不是管理员，则重定向到登录页面
            next({ name: 'Login' });
        } else {
            // 用户角色匹配，允许访问
            next();
        }
    } else {
        // 不需要认证的路由，直接允许访问
        next();
    }

});

export default router
